from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor

def add_ppt_watermark(input_file_path, output_file_path, watermark_text, font_size=30):
    # 打开PPT文件
    prs = Presentation(input_file_path)

    # 获取幻灯片的宽度和高度
    slide_width = prs.slide_width
    slide_height = prs.slide_height

    # 水印文本的宽度和高度
    text_width = Inches(2)  # 水印的宽度（可根据需要调整）
    text_height = Inches(1)  # 水印的高度（可根据需要调整）

    # 设置水印文本的间隔
    x_gap = Inches(1)  # 水平间隔
    y_gap = Inches(1)  # 垂直间隔

    # 计算可以放多少个水印
    num_columns = int((slide_width - Inches(1)) / (text_width + x_gap))  # 每行可以放多少个水印
    num_rows = int((slide_height - Inches(1)) / (text_height + y_gap))  # 每列可以放多少个水印

    # 遍历每个幻灯片
    for slide in prs.slides:
        # 在幻灯片上添加多个水印
        for row in range(num_rows):
            for col in range(num_columns):
                # 计算水印的位置
                left = Inches(1) + col * (text_width + x_gap)
                top = Inches(1) + row * (text_height + y_gap)

                # 创建文本框
                textbox = slide.shapes.add_textbox(left, top, text_width, text_height)
                text_frame = textbox.text_frame
                text_frame.text = watermark_text  # 设置水印文本

                # 设置文本框的字体属性
                p = text_frame.paragraphs[0]
                run = p.runs[0]
                run.font.size = Pt(font_size)  # 设置字体大小
                run.font.name = '宋体'  # 设置字体为宋体
                run.font.color.rgb = RGBColor(169, 169, 169)  # 设置字体颜色为浅灰色

                # 设置文本框旋转角度
                textbox.rotation = -15  # 旋转文本框 -15 度

    # 保存带有水印的PPT文件
    prs.save(output_file_path)

    print(f"水印已成功添加并保存到: {output_file_path}")
if __name__ == '__main__':
    add_ppt_watermark("E:\\test\\a\\个人工作总结.pptx","E:\\test\\b\\个人工作总结.pptx","test")